/*
    * CTCClient.h
    *用于声明Master和Slave共有的客户端功能
    *  Created on: 2024-6-20
*/

#ifndef CTC_CLIENT_H
#define CTC_CLIENT_H
#include "CTCBuffer.h"  
#include "CTCMsgV1.h"
#include "Debug.h"

#define CTC_STATE_UNKNOWN 0xff // 未知状态

/// @brief 主控与从设备连接状态
typedef enum {
    CTC_CLIENT_CONNSTATE_CONNECTTING = 1, // 断线重连或尝试连接状态
    CTC_CLIENT_CONNSTATE_CONNECTED = 2,   // 已连接状态
    CTC_CLIENT_CONNSTATE_OFFLINE = 3      // 参数不足没法建立连接
} CTC_ClientConnState;

/// @brief 数据发送超时后续处理
typedef enum {
    CTC_TIMEOUT_DATAACT_MISS     = 0x00, // 丢失
    CTC_TIMEOUT_DATAACT_RESEND  = 0x01, // 重发
} CTC_MsgReSendAction;

/// @brief 通过物理介质发送数据的回调
/// @param data 指向要发送的数据指针
/// @param len 数据长度
typedef void (*CTC_SendDataCallback)(uint8_t* data, uint16_t len);

/// @brief 消息发送结果回调函数
/// @param result 发送结果,参考CTC_AckResult
/// @param cmdid 命令ID,参考CTC_CMD_XXX
/// @param transactionId 事务ID,与发送时的事务ID相同
/// @return 返回后续处理动作,参考CTC_ClientSendAction
typedef CTC_MsgReSendAction (*CTC_MsgSendCallback)(CTC_AckResult result,uint16_t cmdid, uint32_t transactionId);

/// @brief 连接设备的状态变化回调函数,当连接状态或设备状态,可消费状态变化时调用
/// @param state 当前连接状态,参考CTC_ClientConnState
/// @param prevState 上一个连接状态,参考CTC_ClientConnState
typedef void (*CTC_ConnStateChangeCallback)(CTC_ClientConnState state, CTC_ClientConnState prevState);

#endif // CTC_CLIENT_H

